//单例模式 只允许一个类实例化出一个对象来，并提供一个全局访问点来获取该实例
// 1. 私有化构造函数
// 2. 禁止拷贝构造和赋值运算符
// 3. 定义一个静态指针或者引用   用于指向类的唯一实例
// 4. 提供一个静态共有成员函数

// 懒汉式， 延迟加载，直到首次用到时才会创建加载
class LazySingleton{
public:
    static LazySingleton* getInstance()
    {
        if (instance == nullptr) instance = new LazySingleton();
        return instance;
    }
private:    
    LazySingleton(){};
    static LazySingleton* instance;
};

//饿汉式， 定义了静态成员对象变量，程序在运行之初已经分配了空间，就要调用构造函数了
class HungrySingleton{
public:
    static HungrySingleton * getInstance(){
        return &instance;
    }
private:
    static HungrySingleton instance;
    HungrySingleton(){};
};

